package com.wj.opratorlog.utils;

import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.LinkedBlockingDeque;

public class StackUtils {


    //   数据添加
    private Queue<Integer> queue = new LinkedBlockingDeque<>();

    private Queue<Integer> queue2 = new LinkedBlockingDeque<>();


    public void add(int value) {
        queue.offer(value);
    }


    int pop(){
        //栈中没有元素，抛出异常
        if (queue.size() == 0){
            throw new IndexOutOfBoundsException("stack is empty");
        }
        //除了最后入栈的元素，将其他元素转移到outputQueue
        outCopy(queue,queue2);
        //获取最后入栈元素
        int item = queue.poll();
        //将outputQueue中的所有元素转移到inputQueue中
        inCopy(queue2,queue);
        return item;
    }




    private   void outCopy(Queue dest,Queue src){
        while (src.size() > 1){
            dest.offer(src.poll());

        }
    }

    /**
     * 栈顶元素出栈后所做的转移操作，将所有元素从outputQueue转移到inputQueue
     * @param dest inputQueue
     * @param src outputQueue
     */
    private   void inCopy(Queue dest,Queue src){
        while (src.size() > 0){
            dest.offer(src.poll());
        }
    }


}
